/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package logica;

import fisica.AntecedenteFamiliarFisica;
import fisica.CapaFisica;
import hibernate.objeto.Antecedente;
import hibernate.objeto.AntecedenteFamiliar;
import hibernate.objeto.Cie9mc;
import hibernate.objeto.Paciente;
import java.util.Date;
import java.util.Vector;
import presentacion.CapaPresentacion;

/**
 *
 * @author Gonzalo
 */
public class AntecedenteFamiliarLogica extends CapaLogica {

    /**
     * Crea y persiste los objetos AntecedenteFamiliar.
     *
     * @param datosAntecedentesFamiliar Los datos correspondientes al apartado
     * Antecedentes Familiar
     * @param antecedente El antecedente al cual se asocia
     * @return true si se agregó correctamente, false en caso contrario
     */
    public static boolean agregarAntecedenteFamiliar(
            Object[][] datosAntecedentesFamiliar, Antecedente antecedente) {
        //Crea el objeto Antecedenete Familiar
        AntecedenteFamiliar antecedenteFamiliar;

        int cantidadObjetosACrear = datosAntecedentesFamiliar.length;
        int objetosCreados = 0;

        for (int i = 0; i < cantidadObjetosACrear; i++) {
            antecedenteFamiliar = crearObjetoAntecedenteFamiliar(
                    datosAntecedentesFamiliar[i], antecedente);

            if (!CapaFisica.guardarOActualizarObjeto(antecedenteFamiliar)) {
                return false;
            } else {
                objetosCreados = objetosCreados + 1;
            }
        }

        if (objetosCreados == cantidadObjetosACrear) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Crea un objeto AntecedenteFamiliar con los datos pasados por parámetro.
     *
     * @param datosAntecedentesFamiliar Los datos particulares del objeto
     * @return El objeto AntecedenteFamiliar recien creado
     */
    private static AntecedenteFamiliar crearObjetoAntecedenteFamiliar(Object[]
            datosAntecedentesFamiliar, Antecedente antecedente){

        AntecedenteFamiliar antecedenteFamiliar = new AntecedenteFamiliar();

        antecedenteFamiliar.setAntecedente(antecedente);

        antecedenteFamiliar.setFechaAntecedenteFamiliar(
                (Date) datosAntecedentesFamiliar[
                ANTECEDENTE_ENFERMEDAD_FECHA]);

        antecedenteFamiliar.setVinculoAntecedenteFamiliar(
                datosAntecedentesFamiliar[
                ANTECEDENTE_ENFERMEDAD_PARENTEZCO].toString());

        antecedenteFamiliar.setCie9mc(Cie9mcLogica.getCie9mcPorCodigo(
                ((Cie9mc) datosAntecedentesFamiliar[
                ANTECEDENTE_ENFERMEDAD_CIE9MC]).getCodigoCie9mc()));

        antecedenteFamiliar.setInformacionComplementariaAntecedenteFamiliar(
                datosAntecedentesFamiliar[
                ANTECEDENTE_ENFERMEDAD_INFORMACION_COMPLEMENTARIA].toString());

        antecedenteFamiliar.setOtrosAntecedentesAntecedenteFamiliar(
                datosAntecedentesFamiliar[
                ANTECEDENTE_ENFERMEDAD_OTROS_ANTECEDENTES].toString());

        return antecedenteFamiliar;
    }

    /**
     * Retorna el objeto AntecedenteFamiliar según el ID.
     *
     * @param idAntecedenteFamiliar El id del objeto AntecedenteFamiliar
     * @return El objeto AntecedenteFamiliar consultado, null si no existe
     */
    public static AntecedenteFamiliar getAntecedenteFamiliarPorId(
            int idAntecedenteFamiliar) {
        return AntecedenteFamiliarFisica.getAntecedenteFamiliarPorId(
                idAntecedenteFamiliar);
    }

    /**
     * Retorna el vector de objetos AntecedenteFamiliar según el id del paciente.
     *
     * @param idPaciente El id del paciente consultado
     * @return El vector de objetos AntecedenteFamiliar consultado, null si no
     * existe
     */
    public static Vector<AntecedenteFamiliar>
            getVectorAntecedenteFamiliarPorIdPaciente(int idPaciente) {
        return AntecedenteFamiliarFisica.getVectorAntecedenteFamiliarPorIdPaciente(
                idPaciente);
    }

    /**
     * Retorna el último antecedente familiar cargado del paciente.
     *
     * @param idAntecedente El id del antecedente asociado
     * @return El objeto AntecedenteFamiliar consultado, null si no existe
     */
    public static AntecedenteFamiliar getAntecedenteFamiliarMasRecientePorIdAntecedente(
            int idAntecedente) {
        Vector<AntecedenteFamiliar> antecedenteFamiliar =
                AntecedenteFamiliarFisica.
                getVectorAntecedenteFamiliarPorIdAntecedente(idAntecedente);

        if (antecedenteFamiliar != null) {
            return antecedenteFamiliar.lastElement();
        } else {
            return null;
        }
    }

    /**
     * Retorna el texto HTML correspondiente a la descripcion del antecedente
     * personal del paciente.
     *
     * @param paciente El paciente
     * @return El String que contiene el HTML
     */
    public static String getAntecedenteFamiliarHTML(Paciente paciente) {
        String antecedenteFamiliarHTML = "";

        Vector<AntecedenteFamiliar> vectorAntecedenteFamiliar =
                getVectorAntecedenteFamiliarPorIdPaciente(paciente.getIdPaciente());

        if (vectorAntecedenteFamiliar != null) {
            for (int i = 0; i < vectorAntecedenteFamiliar.size(); i++) {
                antecedenteFamiliarHTML +=
                        "<hr /><font size=\"3\" face=\"arial\" color=\"blue\">ANTECEDENTE FAMILIAR</font><hr /> " +
                        "<font size=\"3\" face=\"arial\" color=\"black\">Fecha: </font>"
                        + "<font size=\"3\" face=\"arial\">" +
                        CapaPresentacion.imprimirFecha(
                        vectorAntecedenteFamiliar.get(i).getFechaAntecedenteFamiliar()) + "</font><br>" +
                        "<font size=\"3\" face=\"arial\" color=\"black\">Relación: </font>"
                        + "<font size=\"3\" face=\"arial\">" +
                        vectorAntecedenteFamiliar.get(i).getVinculoAntecedenteFamiliar() + "</font><br>" +
                        Cie9mcLogica.getCie9mcHTML(vectorAntecedenteFamiliar.get(i).getCie9mc()) +
                        "<font size=\"3\" face=\"arial\" color=\"black\">Información complementaria: </font><br>"
                        + "<font size=\"3\" face=\"arial\">" +
                        vectorAntecedenteFamiliar.get(i).getInformacionComplementariaAntecedenteFamiliar() + "</font><br>" +
                        "<font size=\"3\" face=\"arial\" color=\"black\">Otros antecedentes: </font><br>"
                        + "<font size=\"3\" face=\"arial\">" +
                        vectorAntecedenteFamiliar.get(i).getInformacionComplementariaAntecedenteFamiliar() + "</font><br><br>";
            }
        } else {
            antecedenteFamiliarHTML =
                    "<font size=\"3\" face=\"arial\" color=\"blue\">ANTECEDENTES FAMILIARES</font><br> " +
                    "<font size=\"3\" face=\"arial\">No posee</font><br></font>";
        }

        return antecedenteFamiliarHTML;
    }

}
